package kr.hkit.powerjava.chapter08;

class Student {
	private int stdNum; // 학번
	private String stdName; // 학생명

	// public Student(){}
	// 디폴트 생성자 없으면 만들어 줌

	public int getStdNum() {
		return stdNum;
	}

	public void setStdNum(int stdNum) {

		if (stdNum > 0) { // 이렇게 지정가능
			this.stdNum = stdNum;
		} else {
			this.stdNum = 1;
		}
	}

	public String getStdName() {
		return stdName;
	}

	public void setStdName(String stdName) {
		this.stdName = stdName;
	}// 필드의 값을 니가 바꾸려면 만들어라 get set
		// 프라이빗 정보은닉. 쓰고싶으면 get set 써라

	@Override
	public String toString() {
		return stdNum + stdName;
	}

	public void getSum() {
		int sum = 0;
		int b = 2; // 왠만하면 이렇게 쓰십셔

		for (int i = 0; i < 101; i++) {
			// int b =2 ; //결과는 동일하지만, for문 돌때마다 계속 선언됨.
			sum += i + b;
		}
		System.out.println(sum);
	}
}

public class GetSetTest { // public으로 선언한 클래스는 클래스 파일명과 동일해야함
	public static void main(String[] args) {
		
		int x = 10;
		int y = 20;
		int a = 0,b = 0;
		System.out.printf("%d, %d\n" , x, y );
		
		swap(a,b);
	    System.out.printf("%d, %d\n" , x, y );	
	
		
		
		
		Student std = new Student(); // 생성자가 없지만 자바컴파일러가 자동으로 붙여줘서 호출이 가능함
		// 위에서 private으로 변수 지정해 줘서 여기서는 못씀
		// 쓸려면 그래서 get set
		std.setStdNum(1);
		std.setStdName("김태희");

		Student std2 = new Student();
		std2.setStdNum(1);
		std2.setStdName("김태희");

		Student std3;
		std3 = std2; // 둘다 같은 주소값 가리키고 있음. 주소값이 같으니까 "같음" 
		             
		if(std2==std3){
			System.out.println("같음");
		} else {
			System.out.println("다름");
		}
		
		int i = 10;
		int j = 10;

		if (i == j) {
			System.out.println("같음");
		} else {
			System.out.println("다름");
		}

		if (std == std2) {
			System.out.println("같음");
		} else {
			System.out.println("다름");
		} 
		
		if (std.equals(std2)){ 
			System.out.println("같음");
		} else {
			System.out.println("다름");
		} //equals 써도 안됨. 왜냐? 
		//스튜던트 클래스에서 이콜즈 메소드를 오버라이딩 해야 같음이 나옴

		
		/*
		 * System.out.println("학번 " + std.getStdNum()); System.out.println("성명 "
		 * + std.getStdName());
		 */
		// 이렇게 해도되지만 다 쓰면 귀찮으니까
		// to 스트링으로 오버라이딩

		/* System.out.println(std); */// 참조형이면 std.toString() 자동으로 외부에서 호출해줌.
		// 이거 한줄 적는게 디버깅이 더 편해서, toString 오버라이딩해서 쓰는게 편함

		/* std.getSum(); */// void는 함수호출만 하면됨. getSum 1~100까지 정수합구하기
	}

	private static void swap(int a, int b) {
			int temp = a;
			a=b;
			b=temp;
	}
}
